module(..., package.seeall)

local function create_style(v)
    local s = lvgl.style_t()
    lvgl.style_init(s)
    if not v then return s end
    -- 设置背景
    if v.bg then s = set_bg(s, v.bg) end
    -- 设置边框
    if v.border then s = set_border(s, v.border) end
    -- 设置阴影
    if v.shadow then s = set_shadow(s, v.shadow) end
    -- 设置文字样式
    if v.text then s = set_text(s, v.text) end
    return s
end

function create(p, v)

    local event_handler = function(obj, event)
        if event == lvgl.EVENT_CLICKED then print("按键默认回调") end
    end

    local b = lvgl.btn_create(p, nil)
    lvgl.obj_set_size(b, v.W or 100, v.H or 220)
    lvgl.obj_align(b, v.align_to, v.align or lvgl.ALIGN_CENTER, v.align_x or 0,
                   v.align_y or 0)

    -- 可以使用 lvgl.btn_set_checkable(btn, true) 将按钮配置为切换按钮。在这种情况下，
    -- 单击时，按钮将自动进入lvgl.STATE_CHECKED 状态，或再次单击时返回到lvgl.STATE_CHECKED状态。
    -- lvgl.btn_set_checkable(b, true)

    -- lvgl.btn_set_layout(btn,lvgl.LAYOUT_...) 设置布局。默认值为lvgl.LAYOUT_CENTER 。
    -- 因此，如果添加标签，则标签将自动与中间对齐，并且无法通过 lvgl.obj_set_pos() 移动。
    -- 您可以使用 lvgl.btn_set_layout(btn,lvgl.LAYOUT_OFF) 禁用布局。
    lvgl.btn_set_layout(b, lvgl.LAYOUT_CENTER)

    -- lvgl.btn_set_state(b, lvgl.BTN_STATE_CHECKED_RELEASED)
    -- lvgl.btn_toggle(b)
    -- lvgl.btn_set_fit2(b, lvgl.FIT_NONE, lvgl.FIT_TIGHT)

    lvgl.obj_set_event_cb(b, v.event or event_handler)

    if v.label then label.create(b, v.label) end

    -- lvgl.obj_set_style_local_value_str(b, lvgl.BTN_PART_MAIN,
    --                                    lvgl.STATE_DEFAULT, "Ripple")

    lvgl.obj_add_style(b, lvgl.BTN_PART_MAIN, create_style(v.style))

    return b
end

-- create(lvgl.scr_act(), {
--     W = 300,
--     H = 200,
--     label = {
--         W = 300,
--         H = 200,
--         style = {
--             border = {color = 0x00ff0f, width = 2, opa = 200},
--             shadow = {spread = 30, color = 0xff00f0},
--             bg = {
--                 radius = 10,
--                 color = 0x0f0ff0,
--                 opa = 150,
--                 grad = {color = 0x0f0f0f}
--             },
--             text = {
--                 font = style.font68,
--                 color = 0xff0000,
--                 letter_space = 20,
--                 line_space = 20
--             }
--         },
--         text = "#ff0000 hh# #0f0f00 hhh# #f0ff00 hhh# #0f0ff0 h "
--     },
--     style = {
--         border = {color = 0x0f0f0f, width = 2, opa = 200},
--         shadow = {spread = 10, color = 0xff00f0},
--         bg = {
--             radius = 10,
--             color = 0x0f0ff0,
--             opa = 150,
--             grad = {color = 0x0f0f0f}
--         },
--         font = style.font68
--     }
-- })
